package com.wolf.gulimall.cart.service;

import com.wolf.gulimall.cart.vo.CartItemVo;
import com.wolf.gulimall.cart.vo.CartVo;

import java.util.List;
import java.util.concurrent.ExecutionException;

/**
 * 购物车service
 */
public interface CartService {

    /**
     * 添加商品商品到购物车
     *
     * @param skuId 商品ID
     * @param num   添加商品数量
     * @return 购物项内容
     */
    CartItemVo addToCart(Long skuId, Integer num) throws ExecutionException, InterruptedException;

    /**
     * 根据商品ID查询购物车信息
     *
     * @param skuId 商品ID
     * @return 购物车信息
     */
    CartItemVo getCartItem(Long skuId);

    /**
     * 获取购物车信息
     *
     * @return 购物车信息
     */
    CartVo getCart() throws ExecutionException, InterruptedException;


    /**
     * 清除购物车
     *
     * @param cartKey 购物车键
     */
    void clearCart(String cartKey);

    /**
     * 修改购物车中商品被选中状态
     *
     * @param skuId   商品ID
     * @param checked 被选中状态
     */
    void checkItem(Long skuId, Integer checked);

    /**
     * 修改购物车中商品数量
     *
     * @param skuId 商品ID
     * @param num   商品数量
     */
    void checkItemCount(Long skuId, Integer num);

    /**
     * 删除购物车商品
     *
     * @param skuId 商品ID
     */
    void deleteIdCartInfo(Long skuId);

    /**
     * 查询用户购物车详情信息
     *
     * @return 购物车详情信息
     */
    List<CartItemVo> getUserCartItems();
}
